﻿#define _CRT_SECURE_NO_WARNINGS 1
//1.写一个宏，计算结构体中某变量相对于首地址的偏移，并给出说明
//考察：offsetof宏的实现
//#define offsetof(a,b) (((char*)a-(char*)b))
//#include<stdio.h>
//struct person {
//	char a;
//	int b;
//	double c;
//	short d;
//};
//int main()
//{
//	struct person p;
//	printf("%d", offsetof(&p.d, &p));
//}

//#include<stdio.h>
//#define OFFSETOF(s_type,m_name) (int)&(((s_type*)0)->m_name)
////从第一个0地址向后偏移m_name个数，最后强转为int
//struct p {
//	char a;
//	int b;
//	int c;
//};
//int main()
//{
//	printf("%d\n", OFFSETOF(struct p, a));
//	printf("%d\n", OFFSETOF(struct p, b));
//	printf("%d\n", OFFSETOF(struct p, c));
//}


//2.写一个宏，可以将一个整数的二进制位的奇数位和偶数位交换。
//0xaaaaaaaa=1010 1010 1010 1010 1010 1010 1010 1010表示偶数
//0x55555555=0101 0101 0101 0101 0101 0101 0101 0101表示奇数
//偶数右移，奇数左移，再做或操作。
//#define swap(a) (((a&0xaaaaaaaa)>>1)|((a&0x55555555)<<1))
//#include<stdio.h>
//int main()
//{
//	printf("%d", swap(10));
//}


